package com.zenithmind.note.service;

/**
 * 用户上下文服务接口
 * 遵循依赖倒置原则：抽象用户上下文获取逻辑，避免直接依赖SecurityUtils
 * 
 * @author ZenithMind
 * @since 2024-01-01
 */
public interface UserContextService {
    
    /**
     * 获取当前登录用户ID
     * 
     * @return 用户ID，如果未登录则返回null
     */
    String getCurrentUserId();
    
    /**
     * 获取当前登录用户ID，如果未登录则抛出异常
     * 
     * @return 用户ID
     * @throws RuntimeException 如果用户未登录
     */
    String requireCurrentUserId();
    
    /**
     * 判断当前用户是否已登录
     * 
     * @return 是否已登录
     */
    boolean isUserLoggedIn();
    
    /**
     * 判断指定用户是否为当前登录用户
     * 
     * @param userId 用户ID
     * @return 是否为当前用户
     */
    boolean isCurrentUser(String userId);
    
    /**
     * 获取当前用户的角色信息
     * 
     * @return 角色列表
     */
    java.util.List<String> getCurrentUserRoles();
    
    /**
     * 判断当前用户是否具有指定角色
     * 
     * @param role 角色名称
     * @return 是否具有该角色
     */
    boolean hasRole(String role);
    
    /**
     * 判断当前用户是否为管理员
     * 
     * @return 是否为管理员
     */
    boolean isAdmin();
}
